草庐IT

oop - 去OOP实现

全部标签

c# - 开放实现的开放通用接口(interface)类型不等于接口(interface)类型?

在我看来,这是一个应该通过但没有通过的测试。[TestMethod]publicvoidcan_get_open_generic_interface_off_of_implementor(){typeof(OpenGenericWithOpenService).GetInterfaces().First().ShouldEqual(typeof(IGenericService));}publicinterfaceIGenericService{}publicclassOpenGenericWithOpenService:IGenericService{}为什么没有通过?给定Typet=

c# - 使用泛型实现类型安全的枚举模式

如何在泛型类上实现类型安全的枚举模式?让我们假设它是按照这些思路实现的publicclassKnownSetting{publicreadonlystaticKnownSettingName=newKnownSetting("name","DefaultName",t=>t);publicreadonlystaticKnownSettingSize=newKnownSetting("size","25",t=>Converter.ToInt32);publicStringKey{get;set;}publicTDefaultValue{get;set;}publicFuncConver

c# - 在实现自己的 IUserStore 时,类上的 "optional"接口(interface)实际上是可选的吗?

我正在使用Microsoft的Asp.NetIdentity框架版本2,并且正在实现我自己的IUserStore。我的新类MyUserStore实现IUserStore接口(interface)和IUserPasswordStore,这是与UserManager一起使用所需要的类(class)。或者至少这是我从阅读this等教程中收集到的信息:"TheonerequiredinterfaceintheidentitysystemisIUserStore"-ScottAllen但是我运行代码的时候好像不是这样。我初始化我的管理器:varuMan=newUserManager(newMyU

c# - 为什么我可以通过索引访问 KeyCollection/ValueCollection 中的项目,即使它没有实现 IList(Of Key)?

我注意到一个奇怪的VB.NET东西。来自thisquestion我提供了一种访问字典的键和值的方法'KeysCollection和ValuesCollection通过索引获取第一项。我知道它只在SortedDictionary中才有意义因为正常Dictionaryisnotordered(好吧,你不应该依赖它的顺序)。这是一个简单的例子:DimsortedDictAsNewSortedDictionary(OfDateTime,String)sortedDict.Add(DateTime.Now,"Foo")DimkeysAsSortedDictionary(OfDateTime,St

c# - 试图了解微软对 WeakReference 的实现

作为一名试图习惯.NET的经验丰富的C++程序员,Microsoft的WeakReference“Target”属性中有一个实现细节让我很困扰...publicclassWeakReference:ISerializable{internalIntPtrm_handle;internalboolm_IsLongReference;...publicvirtualobjectTarget{[SecuritySafeCritical]get{IntPtrhandle=this.m_handle;if(IntPtr.Zero==handle){returnnull;}objectresult

c# - 如果接口(interface)调用 Dispose 的实现是否是泄漏抽象

考虑这段代码:publicclassMyClass(){publicMyClass(){}publicDoSomething(){using(varservice=newCustomerCreditServiceClient()){varcreditLimit=service.GetCreditLimit(customer.Firstname,customer.Surname,customer.DateOfBirth);}}}我们现在想重构它以松耦合。我们最终得到这个:publicclassMyClass(){privatereadonlyICustomerCreditServices

c# - 正确实现两个不同类型但语义等价的对象的比较

我发现了一个类似的问题Howtocomparetwodistinctlydifferentobjectswithsimilarproperties这可能会隐含地和/或部分地回答我的问题。假设我想比较(没有很多嵌套条件)这个对象:classObjectA{publicstringPropertyX{get;set;}publiccharPropertyY{get;set;}publiclongPropertyZ{get;set;}}到System.String.我只对平等或不平等感兴趣(不是关于身份的一系列值(value)观)。实现IEquatable在ObjectA是正确的选择吗?我不

c# - 为什么这个对象的类型通过反射显示没有接口(interface),尽管至少实现了两个?

首先,一个按预期工作的示例:(所有代码都在VS2008即时窗口中执行)25isIComparable>>true25.GetType().GetInterfaces()>>{System.Type[5]}>>[0]:{Name="IComparable"FullName=...>>[1]:{Name="IFormattable"FullName=...>>...到目前为止一切顺利。现在让我们尝试一个通过基类型继承接口(interface)的对象:classTestBase:IComparable{publicintCompareTo(objectobj){thrownewNotImpl

c# - Dominion AI 播放器的正确 OOP 结构

我一直在尝试为流行的纸牌游戏Dominion(http://www.boardgamegeek.com/boardgame/36218/dominion)制作AI玩家。如果您不熟悉这款游戏,它基本上是Magic:TheGathering的一个非常精简的表亲,其中有一个很大的纸牌库,上面有不同的规则。在游戏过程中,玩家购买这些卡牌并将它们合并到他们的套牌中。从机器学习的角度来看,我对这款游戏很感兴趣-我想让机器人互相对抗,让它们玩数百万个游戏,并尝试挖掘数据洞察力,让它们玩得更好。我不确定如何将游戏规则(印在每张卡片上的逐字说明)与核心AI决策逻辑分开。我开始的明显路径是为每张卡片创建一

c# - 如何实现 StringBuilder 和/或调用 String.FastAllocateString?

我很想知道我是否可以创建一个优化版本的StringBuilder(尝试稍微加快它的速度,因为它目前是我的一个应用程序的瓶颈)。对我来说不幸的是,它似乎利用了我无法使用(或者看起来如此)的“神奇”系统调用。反编译System.Text.StringBuilder的源代码后,我注意到它使用了以下内部(因此无法调用)系统调用:[SecurityCritical][MethodImpl(MethodImplOptions.InternalCall)]internalstaticstringFastAllocateString(intlength);还有这个未记录的属性被大量使用:[ForceT